package ListNode;


import java.util.List;

class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) {
        this.val = val;
    }
    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

public class Demo1 {
    public static void main(String[] args) {

    }

    /**
     * 删除链表元素
     * @param head
     * @param val
     * @return
     */
    public ListNode removeElements1(ListNode head, int val) {
        // 头结点 为null
        if(head == null) {
            return head;
        }
        // 设置傀儡节点
        ListNode dummy = new ListNode(-1,head);
        ListNode cur = head; // cur 代替 头结点
        ListNode pre = dummy; // pre 代替 头结点
        while (cur != null) {
            if(cur.val == val) {
                pre.next = cur.next;
            }else {
                pre = cur;
            }
            cur = cur.next;
        }
        return dummy.next;
    }

    // 傀儡节点法
        // 好处 不用管 头节点为空不为空，直接一起删除！！！
    public ListNode removeElements(ListNode head, int val) {

        // 设置傀儡节点
        ListNode dum = new ListNode(-1);
        // 连接 头节点
        dum.next = head;
        ListNode cur = dum; // cur 代替 傀儡节点
        while (cur.next != null) { // 下一个节点不为空,包括了 头节点
            if(cur.next.val == val){
                cur.next = cur.next.next;
            }else {
                cur = cur.next;
            }
        }
        return dum.next;

    }
}
